package codingInterview.leetcode.editor.cn;

//实现 pow(x, n) ，即计算 x 的 n 次幂函数（即，xⁿ）。不得使用库函数，同时不需要考虑大数问题。 
//
// 
//
// 示例 1： 
//
// 
//输入：x = 2.00000, n = 10
//输出：1024.00000
// 
//
// 示例 2： 
//
// 
//输入：x = 2.10000, n = 3
//输出：9.26100 
//
// 示例 3： 
//
// 
//输入：x = 2.00000, n = -2
//输出：0.25000
//解释：2⁻² = 1/2² = 1/4 = 0.25 
//
// 
//
// 提示： 
//
// 
// -100.0 < x < 100.0 
// -2³¹ <= n <= 2³¹-1 
// -10⁴ <= xⁿ <= 10⁴ 
// 
//
// 
//
// 注意：本题与主站 50 题相同：https://leetcode-cn.com/problems/powx-n/ 
// Related Topics 递归 数学 👍 261 👎 0

//Java：剑指 Offer 16 - 数值的整数次方
public class ShuZhiDeZhengShuCiFangLcof{
    public static void main(String[] args) {
                Solution solution = new ShuZhiDeZhengShuCiFangLcof().new Solution();
        // TO TEST
    }
    
    //leetcode submit region begin(Prohibit modification and deletion)
class Solution {
    public double myPow(double x, int n) {
        if(x==0) return 0;
        if(x==1 || n==0) return 1;
        if(x==-1) return n%2==0?1:-1;
        if(n==Integer.MIN_VALUE) return 0;
        boolean symbol1 = true,symbol2 =true;
        if(x<0 && n%2!=0){
            x=-x;
            symbol1 = false;
        }
        if(n<0){
            n=-n;
            symbol2 = false;
        }
        double res = 1;
        for (int i = 0; i < n; i++) {
            res*=x;
        }
        if(!symbol1) res =-res;
        return symbol2?res:(1.0/res);
    }
}
//leetcode submit region end(Prohibit modification and deletion)

}
